#ifndef SYMBOLE_H_
#define SYMBOLE_H_

#include <iostream>
#include <vector>
#include <string>
using namespace std;
#define FICHIER_MOTS_CLE "motsCles.txt"

class Symbole {
    
    public:
        //Type énuméré
                enum categorieSymbole { MOTCLE, VARIABLE, ENTIER, INDEFINI, FINDEFICHIER, CHAINE };
        //Méthodes Publiquees
                Symbole(string s = string("")); // construit le symbole à partir de la chaine s
                inline string getChaine() { return this->chaine; } // retourne la chaine du symbole
        //Surcharge d'opérateurs
                bool operator ==(string ch); // pour tester l'égalité entre le symbole et une chaîne cette derniére peut étre
                                // soit la chaine du symbole soit le catégorie du symbole ex :"<CHAINE>"
                inline bool operator !=(string ch) { return !(*this == ch);} // méme opération que l'opérateur == 
                                                                //puisqu'on fait appel a l'opérateur surcharger ==
                friend ostream & operator <<(ostream & cout, Symbole symb); // surcharge de l'opérateur << pour pouvoir afficher 
                                                               //un objet de la classe Symbole sur un flux de sortie
    private:
        //Attributes 
                string chaine; // chaine du symbole
                categorieSymbole categorie; // categorie du symbole (voir type énuméré ci-dessus)
        //Méthodes Privees
                static bool isMotCle(string s); // méthode de classe : renvoie vrai si s est un mot clé du langage => dans le fichier des mots clé
};

#endif /* SYMBOLE_H_ */
